package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.ISocPlanDispatchUserDAO;
import org.jsola.hr.dto.SocPlanDispatchDTO;
import org.jsola.hr.dto.SocPlanDispatchUserAddDTO;
import org.jsola.hr.dto.SocPlanDispatchUserUpdateDTO;
import org.jsola.hr.entity.SocPlanDispatchUserDO;
import org.jsola.hr.query.SocPlanDispatchUserQuery;
import org.jsola.hr.vo.*;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * 增减员计划派单人员表
 *
 * @author zhr
 */
public interface ISocPlanDispatchUserService extends IService<ISocPlanDispatchUserDAO, SocPlanDispatchUserDO> {

    /**
     * 新增增减员计划派单人员表
     *
     * @param socPlanDispatchUserAddDTO 新增增减员计划派单人员表DTO
     * @param tokenUser                 当前用户
     * @return 增减员计划派单人员表详情信息
     */
    SocPlanDispatchUserVO save(SocPlanDispatchUserAddDTO socPlanDispatchUserAddDTO, TokenUser tokenUser);

    /**
     * 修改增减员计划派单人员表
     *
     * @param socPlanDispatchUserUpdateDTO 修改增减员计划派单人员表DTO
     * @param tokenUser                    当前用户
     * @return 更新数量
     */
    int update(SocPlanDispatchUserUpdateDTO socPlanDispatchUserUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除增减员计划派单人员表，物理删除，更新is_valid字段，从回收站删除
     *
     * @param tokenUser              当前用户
     * @param socPlanDispatchUserIds 增减员计划派单人员表id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String... socPlanDispatchUserIds);

    /**
     * 根据增减员计划派单人员表id查找
     *
     * @param socPlanDispatchUserId 增减员计划派单人员表id
     * @param siteId                所属站点id
     * @return 增减员计划派单人员表详情信息
     */
    SocPlanDispatchUserVO selectById(String socPlanDispatchUserId, String siteId);

    /**
     * 查询增减员计划派单人员表
     *
     * @param socPlanDispatchUserQuery 查询条件
     * @param siteId                   所属站点id
     * @return 增减员计划派单人员表列表信息
     */
    List<SocPlanDispatchUserListVO> select(SocPlanDispatchUserQuery socPlanDispatchUserQuery, String siteId);

    /**
     * 查询增减员计划派单人员表记录数
     *
     * @param socPlanDispatchUserQuery 查询条件
     * @param siteId                   所属站点id
     * @return 增减员计划派单人员表记录数
     */
    int selectCount(SocPlanDispatchUserQuery socPlanDispatchUserQuery, String siteId);

    /**
     * 分页查询增减员计划派单人员表
     *
     * @param socPlanDispatchUserQuery 查询条件
     * @param siteId                   所属站点id
     * @return 增减员计划派单人员表列表信息
     */
    Page<SocPlanDispatchUserListVO> selectPage(SocPlanDispatchUserQuery socPlanDispatchUserQuery, String siteId);


    /**
     * 根据增减员计划派单人员表id查找
     *
     * @param socPlanDispatchUserId 增减员计划派单人员表id
     * @param siteId                所属站点id
     * @return 增减员计划派单人员表
     */
    SocPlanDispatchUserDO selectDOById(String socPlanDispatchUserId, String siteId);

    /**
     * 查询增减员计划派单人员表
     *
     * @param socPlanDispatchUserQuery 查询条件
     * @param siteId                   所属站点id
     * @return 增减员计划派单人员表列表
     */
    List<SocPlanDispatchUserDO> selectDO(SocPlanDispatchUserQuery socPlanDispatchUserQuery, String siteId);

    /**
     * 增减员计划派单
     *
     * @param socPlanDispatchDTO 派单参数
     * @param tokenUser          当前用户
     */
    void dispatch(SocPlanDispatchDTO socPlanDispatchDTO, TokenUser tokenUser);

    /**
     * 首页查询对应登陆用户的接单列表
     *
     * @param query     查询条件
     * @param tokenUser 当前用户
     * @return 增减员计划
     */
    Page<EmpSocPlanListVO> taskOrderUser(SocPlanDispatchUserQuery query, TokenUser tokenUser);

    /**
     * 根据userId和planId查询
     *
     * @param userId userId
     * @param planId planId
     * @param type   类型
     * @return 列表
     */
    List<SocPlanDispatchUserDO> selectByUserIdAndPlanId(String userId, String planId, Integer type);

    /**
     * 接单顶部统计
     *
     * @param query     查询条件
     * @param tokenUser 当前用户
     * @return 统计结果
     */
    TaskOrderUserCountVO taskOrderUserCount(SocPlanDispatchUserQuery query, TokenUser tokenUser);

    /**
     * 批量保存
     *
     * @param saveList 保存列表
     */
    void bachSave(List<SocPlanDispatchUserDO> saveList);

    /**
     * 社保总览子项统计
     *
     * @param query     查询条件
     * @param tokenUser 当前用户
     * @return 子项统计
     */
    SocOverviewItemStatsListVO socOverviewItemStats(SocPlanDispatchUserQuery query, TokenUser tokenUser);

    /**
     * 社保总览金额统计
     *
     * @param query     查询参数
     * @param tokenUser 当前用户
     * @return 金额统计
     */
    SocOverviewAmountStatsVO socOverviewAmountStats(SocPlanDispatchUserQuery query, TokenUser tokenUser);

    /**
     * 社保总览列表统计
     *
     * @param query     查询参数
     * @param tokenUser 当前用户
     * @return 列表
     */
    Page<EmpSocInfoListVO> socOverviewListStats(SocPlanDispatchUserQuery query, TokenUser tokenUser);

    /**
     * 社保总览保存表头
     *
     * @param saveHead  表头
     * @param tokenUser 当前用户
     */
    void saveSocOverviewListUserHead(List<CompoundHeadVO> saveHead, TokenUser tokenUser);

    /**
     * 社保总览表头
     *
     * @param tokenUser 当前用户
     * @return 表头
     */
    List<CompoundHeadVO> socOverviewListHead(TokenUser tokenUser);

    /**
     * 社保总览导出
     *
     * @param query     查询条件
     * @param tokenUser 当前用户
     * @return Excel路径
     */
    String exportSocOverviewList(SocPlanDispatchUserQuery query, TokenUser tokenUser);
}


